﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

#include <stdio.h>

//int main()
//{
//    int a = 10000;
//    FILE* pf = fopen("test.txt", "wb");//write binary
//    if (pf == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    fwrite(&a, 4, 1, pf);//二进制的形式写到文件中
//
//    fclose(pf);
//    pf = NULL;
//
//    return 0;
//}

#include <stdio.h>

//fopen 打开文件成功，返回文件信息区的地址
//      打开文件失败，返回NULL
//int main()
//{
//    //绝对路径
//    //FILE* pf = fopen("C:\\Users\\zpeng\\Desktop\\test.txt", "w");
//    //相对路径
//    //. -- 当前路径
//    //.. -- 上一级路径
//    //FILE* pf = fopen(".\\..\\..\\test.txt", "w");
//    FILE* pf = fopen(".\\..\\x64\\test.txt", "w");
//    if (pf == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//    else
//    {
//        printf("打开文件成功\n");
//    }
//    //读 / 写文件
//
//
//    //关闭文件
//    fclose(pf);
//    pf = NULL;//避免成为野指针
//
//    return 0;
//}

//---------------------------------------------------
//fputc
//int main()
//{
//	FILE* pf = fopen(".\\..\\动态内存管理3_17\\test2.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	for (int i = 'a'; i <= 'z'; i++)
//	{
//		putc(i, pf);
//	}
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//-----------------------------------------------------
//fgetc
//int main()
//{
//	//FILE* pf = fopen(".\\文件操作3_18\\data.txt", "r");
//	FILE* pf = fopen(".\\..\\data.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char a = fgetc(pf);
//	printf("%c\n", a);
//
//	a = fgetc(pf);
//	printf("%c\n", a);
//
//	a = fgetc(pf);
//	printf("%c\n", a);
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//-----------------------------------------------------
//fputs 输出流
//int main()
//{
//	FILE* pf = fopen("./test2.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	fputs("Hello world", pf);
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//-----------------------------------------------------
//fgets 输入流
//int main()
//{
//	FILE* pf = fopen("./test2.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char arr[20];
//	fgets(arr, 3, pf);
//	fprintf(stdout, "%s\n", arr);
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}
//int main()
//{
//	FILE* pf = fopen("./test2.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char arr[20];
//	
//	fprintf(stdout, "%s\n", fgets(arr, 3, pf));
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

//-----------------------------------------------------
//fprintf 输出流
//int main()
//{
//	FILE* pf = fopen("test2.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char arr[10] = "Hello\0";//17
//	char arr[10] = "Hello\n";//18
//	int a = 100;
//	double b = 3.1415;
//	printf("%d",fprintf(pf, "%s%d %lf", arr, a, b));//返回的打印的字符
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test2.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//char arr[10] = "Hello\0";
//	char arr[10] = "Hello\n";
//	int a = 100;
//	double b = 3.1415;
//	printf("%d\n", fprintf(stdout, "%s%d %lf\n", arr, a, b));//返回的打印的字符  19
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

//struct S
//{
//	char arr[20];
//	int num;
//	double pai;
//};
//
//int main()
//{
//	struct S s = { "world", 202, 3.14 };
//	fprintf(stdout, "%s %d %.2lf", s.arr, s.num, s.pai);
//
//	return 0;
//}
//-----------------------------------------------------
//fscanf 输入流
//struct S
//{
//	char arr[20];
//	int num;
//	double pai;
//};
//int main()
//{
//	FILE* pf = fopen("test2.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	struct S s;
//	//读文件
//	fscanf(pf, "%s %d %lf", s.arr, &(s.num), &(s.pai));
//	printf("%s %d %lf\n", s.arr, s.num, s.pai);
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

//struct S
//{
//	char arr[20];
//	int num;
//	double pai;
//};
//
//int main()
//{
//
//	struct S s = { 0 };
//	fscanf(stdin, "%s %d %lf", s.arr, &(s.num), &(s.pai));
//	//scanf("%s %d %lf", s.arr, &(s.num), &(s.pai));
//	printf("%s %d %lf\n", s.arr, s.num, s.pai);
//
//	return 0;
//}

//-----------------------------------------------------
//sprintf输出流  将格式化数据写入字符串
//sscanf 输入流
//struct S
//{
//	char arr[20];
//	int num;
//	double pai;
//};
//
//int main()
//{
//	struct S s = { "world", 202, 3.14 };
//	//将格式化数据写入字符串
//	char arr[30] = { 0 };
//	sprintf(arr, "%s %d %lf", s.arr, s.num, s.pai);
//	printf("字符串：%s\n", arr);
//	struct S t;
//	sscanf(arr,"%s %d %lf", t.arr, &(t.num), &(t.pai));
//	printf("结构体：%s %d %lf\n", t.arr, t.num, t.pai);
//	return 0;
//}


//-----------------------------------------------------
//fwrite 输出流 ⼆进制输出

//int main()
//{
//	FILE* pf = fopen("bin.txt", "wb");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//二进制的形式写文件
//	int arr[] = { 1,2,3,4,5 };
//	fwrite(arr, sizeof(arr[0]), 5, pf);
//	//fwrite(arr, 20, 1, pf);
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//-----------------------------------------------------
//fread 输入流 ⼆进制输入
//int main()
//{
//	FILE* pf = fopen("bin.txt", "rb");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//二进制的形式读文件
//	int arr[10] = { 0 };
//	fread(arr, sizeof(int), 5, pf);
//
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

//
//-----------------------------------------------------
//随机读取
//int main()
//{
//	FILE* pf = fopen("test2.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	int ch = fgetc(pf);
//	fputc(ch, stdout);
//
//	long int r = ftell(pf);
//	printf("\n%ld\n", r);//1
//
//	//定位文件指针指向‘5’
//	fseek(pf, -3, SEEK_END);
//
//	//Constant	Reference position
//	//	SEEK_SET	Beginning of file
//	//	SEEK_CUR	Current position of the file pointer
//	//	SEEK_END	End of file*
//
//	ch = fgetc(pf);//5
//	fputc(ch, stdout);
//
//	//光标指向的是0
//	r = ftell(pf);
//	printf("\n%ld\n", r);//15
//
//	rewind(pf);//让文件指针回到起始位置
//	ch = fgetc(pf);
//	fputc(ch, stdout);//H
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//-------
int main()
{
	FILE* pf = fopen("test2.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	int ch = 0;

	while ((ch = fgetc(pf)) != EOF)
	{
		printf("%c ", ch);
	}

	fclose(pf);
	pf = NULL;

	return 0;
}

